﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace ModeloNegocio
{
    public static class CapaDeNegocioUsuario
    {

        public static IEnumerable<Usuario> Usuarios
        {
            get
            {
                /* Creo  una lista de usuarios */
                List<Usuario> usuarios = new List<Usuario>();                   
                    
                SqlDataReader rdr = ConexionBaseDatos.obtenerReaderStoreProcedure("spObtenerUsuarios",null);

                /* Mientras que haya una fila para leer */
                while (rdr.Read())
                {
                    /* creamos un Usuario */
                    Usuario usuario = new Usuario();

                    /* llenamos los datos del Usuario con los datos de la base de datos*/
                    usuario.IdUsuario = Convert.ToInt32(rdr["IdUsuario"]);
                    usuario.UserName = Convert.ToString(rdr["UserName"]);
                    usuario.Nombre = Convert.ToString(rdr["Nombre"]);
                    usuario.Apellido = Convert.ToString(rdr["Apellido"]);
                    usuario.Mail = Convert.ToString(rdr["Mail"]);
                    usuario.Telefono = Convert.ToString(rdr["Telefono"]);
                    usuario.Password = Convert.ToString(rdr["PasswordUsuario"]);

                    /* Agregamos el usuario a la lista usarios*/
                    usuarios.Add(usuario);
                }                 
                
                return usuarios;                
            }
        }

        public static void RegistrarUsuario(Usuario usuario){

            List<SqlParameter> listaParametros = new List<SqlParameter>();
                    
            /* Creamos los parametros que necesita el Store Procedure "spAgregarUsuario" que son Nombre, Apellido, Mail, Telefono y Password */

            SqlParameter paramNombre = new SqlParameter();
            paramNombre.ParameterName = "@Nombre";
            paramNombre.Value = usuario.Nombre;
            listaParametros.Add(paramNombre);

            SqlParameter paraUserName = new SqlParameter();
            paraUserName.ParameterName = "@UserName";
            paraUserName.Value = usuario.UserName;
            listaParametros.Add(paraUserName);

            SqlParameter paramApellido = new SqlParameter();
            paramApellido.ParameterName = "@Apellido";
            paramApellido.Value = usuario.Apellido;
            listaParametros.Add(paramApellido);

            SqlParameter paramMail = new SqlParameter();
            paramMail.ParameterName = "@Mail";
            paramMail.Value = usuario.Mail;
            listaParametros.Add(paramMail);

            SqlParameter paramPassword = new SqlParameter();
            paramPassword.ParameterName = "@PasswordUsuario";
            paramPassword.Value = usuario.Password;
            listaParametros.Add(paramPassword);

            SqlParameter paramTelefono = new SqlParameter();
            paramTelefono.ParameterName = "@Telefono";
            paramTelefono.Value = usuario.Telefono;
            listaParametros.Add(paramTelefono);           

            ConexionBaseDatos.ejecutarStoreProcedure("spRegistrarUsuario", listaParametros);
            
        }

        public static bool ValidarUsuario(string mail, string password)
        {
            List<SqlParameter> listaParametros = new List<SqlParameter>();

            SqlParameter paramMail = new SqlParameter();
            paramMail.ParameterName = "@Mail";
            paramMail.Value = mail;
            listaParametros.Add(paramMail);

            SqlParameter paramPassword = new SqlParameter();
            paramPassword.ParameterName = "@PasswordUsuario";
            paramPassword.Value = password;
            listaParametros.Add(paramPassword);

            int resultado;

            /* devuelve "1" si el usuario es valido en caso contrario devuelve "0" */
            resultado = ConexionBaseDatos.obtenerNumeroStoreProcedure("spValidarUsuario", listaParametros);            

            return resultado == 1;

                
        }



    }
}
